<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="M9UfX" id="M9UfX"><span data-lake-id="uf5a49a10" id="uf5a49a10">典型回答</span></h1>
  <p data-lake-id="u1f74cefd" id="u1f74cefd"><br></p>
  <p data-lake-id="u4b53a7d6" id="u4b53a7d6"><span data-lake-id="u932e7045" id="u932e7045">BASE理论是对CAP理论的延伸，核心思想是即使无法做到强一致性（Strong Consistency，CAP的一致性就是强一致性），但应用可以采用适合的方式达到最终一致性（Eventual Consitency）。</span></p>
  <p data-lake-id="u9789c427" id="u9789c427"><span data-lake-id="u35cd478f" id="u35cd478f">​</span><br></p>
  <p data-lake-id="u3e0fcfe1" id="u3e0fcfe1"><span data-lake-id="uade75ad1" id="uade75ad1">BASE是指基本可用（Basically Available）、软状态（ Soft State）、最终一致性（ Eventual Consistency）。</span></p>
  <p data-lake-id="u1088e4b7" id="u1088e4b7"><span data-lake-id="u3e1d81dc" id="u3e1d81dc">​</span><br></p>
  <p data-lake-id="ua155a197" id="ua155a197"><span data-lake-id="u329fdb43" id="u329fdb43">做不到100%可用，那么就做到基本可用。做不到强一致性，那么就做到最终一致性。</span></p>
  <p data-lake-id="uf5387277" id="uf5387277"><span data-lake-id="ubf64712c" id="ubf64712c">​</span><br></p>
  <p data-lake-id="u37ae54b5" id="u37ae54b5"><strong><span data-lake-id="u13f92eb4" id="u13f92eb4">想要做到BASE，那么主要就是用这几个手段：中间状态（软状态）+重试（最终一致性）+降级（基本可用）</span></strong></p>
  <h2 data-lake-id="Ogqfu" id="Ogqfu"><span data-lake-id="u063a0d49" id="u063a0d49" style="color: rgb(85, 85, 85)">基本可用（Basically Available）</span></h2>
  <p data-lake-id="u37a7b8cb" id="u37a7b8cb"><span data-lake-id="uc3b1aac8" id="uc3b1aac8">基本可用是指分布式系统在出现故障的时候，允许损失部分可用性（降级），即保证核心可用。</span></p>
  <p data-lake-id="u66d13c68" id="u66d13c68"><span data-lake-id="u8c0a7878" id="u8c0a7878">​</span><br></p>
  <p data-lake-id="u2eece641" id="u2eece641"><span data-lake-id="uf8e912b4" id="uf8e912b4">电商大促时，为了应对访问量激增，部分用户可能会被引导到降级页面，服务层也可能只提供降级服务。这就是损失部分可用性的体现。</span></p>
  <p data-lake-id="u92e2cc25" id="u92e2cc25"><span data-lake-id="u78cb6878" id="u78cb6878">​</span><br></p>
  <p data-lake-id="u6323cdbc" id="u6323cdbc"><span data-lake-id="u2ad8d86d" id="u2ad8d86d">​</span><br></p>
  <h2 data-lake-id="R7rab" id="R7rab"><span data-lake-id="uc9100612" id="uc9100612" style="color: rgb(85, 85, 85)">软状态（ Soft State）</span></h2>
  <p data-lake-id="u4880f445" id="u4880f445"><span data-lake-id="u925e758b" id="u925e758b">软状态是指允许系统存在中间状态，而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本，允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。</span></p>
  <p data-lake-id="u29cf2fda" id="u29cf2fda"><span data-lake-id="ua6a9bad4" id="ua6a9bad4">​</span><br></p>
  <p data-lake-id="u710f46e3" id="u710f46e3"><span data-lake-id="u0b14d4bc" id="u0b14d4bc">其实就是中间状态，比如当前INIT，然后处理中推进到PROCESSING，然后可以基于这个PROCESSING不断重试，直到推进到SUCCESS</span></p>
  <p data-lake-id="uae45b5fb" id="uae45b5fb"><span data-lake-id="ue55672a1" id="ue55672a1">​</span><br></p>
  <p data-lake-id="ue30a71a6" id="ue30a71a6"><span data-lake-id="u203207c6" id="u203207c6">有了软状态，我们才能重试。</span></p>
  <h2 data-lake-id="eGM84" id="eGM84"><span data-lake-id="uba5e053a" id="uba5e053a" style="color: rgb(85, 85, 85)">最终一致性（ Eventual Consistency）</span></h2>
  <p data-lake-id="ua3637665" id="ua3637665" style="text-align: justify"><span data-lake-id="u007139ca" id="u007139ca">最终一致性是指系统中的所有数据副本经过一定时间后，最终能够达到一致的状态。弱一致性和强一致性相反，最终一致性是弱一致性的一种特殊情况。</span></p>
  <h1 data-lake-id="CqOPw" id="CqOPw"><span data-lake-id="u90bd3009" id="u90bd3009">扩展知识</span></h1>
  <h2 data-lake-id="OpS2p" id="OpS2p"><span data-lake-id="uf8033d7a" id="uf8033d7a">ACID和BASE的区别与联系</span></h2>
  <p data-lake-id="u17215a0a" id="u17215a0a"><br></p>
  <p data-lake-id="u0ed9d9bb" id="u0ed9d9bb"><span data-lake-id="uc8b10efa" id="uc8b10efa">ACID是传统数据库常用的设计理念，追求强一致性模型。BASE支持的是大型分布式系统，提出通过牺牲强一致性获得高可用性。</span></p>
  <p data-lake-id="u79448354" id="u79448354"><span data-lake-id="u98820c0b" id="u98820c0b">​</span><br></p>
  <p data-lake-id="u5c4ff68c" id="u5c4ff68c"><span data-lake-id="u79a33db7" id="u79a33db7">ACID和BASE代表了两种截然相反的设计哲学</span></p>
  <p data-lake-id="u545f1b17" id="u545f1b17"><span data-lake-id="ub0531999" id="ub0531999">​</span><br></p>
  <p data-lake-id="u89175e36" id="u89175e36"><span data-lake-id="ua3d16a40" id="ua3d16a40">在分布式系统设计的场景中，系统组件对一致性要求是不同的，因此ACID和BASE又会结合使用。</span></p>
 </body>
</html>